﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using InnvoiceActual.Logica.GestorObject.Factura;
using InnvoiceActual.Logica.GestorDB.FacturaDB;
using System.ComponentModel;
using InnvoiceActual.BaseDeDatos.innvoicedbDataSetTableAdapters;
using System.Data;
using MySql.Data.MySqlClient;
using System.Windows;

namespace InnvoiceActual.Logica.GestorDB.FacturaDB
{
    public sealed class ConfigFacturaDB : INotifyPropertyChanged
    {
        private List<ConfigFactura> _configFact = new List<ConfigFactura>();
        private static ConfigFacturaDB _instance;
        public delegate void EnviarConfigFactura(ConfigFactura sender);
        public EnviarConfigFactura enviarConfig;

        #region events
        public event PropertyChangedEventHandler PropertyChanged;
        #endregion

        public ConfigFacturaDB()
        {
            //seteo las configuraciones para las facturas
            obtenerConfiguracion();
        }


        public static ConfigFacturaDB Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new ConfigFacturaDB();
                }
                return _instance;
            }
        }


        public void obtenerConfiguracion()
        {         
    //campos de la tabla
    //            codigo_empresa	tinyint(2)		UNSIGNED ZEROFILL	No	None		 Navegar los valores distintivos	 Cambiar	 Eliminar	 Primaria	 Único	 Índice	Texto completo
    //codigoTipo	tinyint(3)		UNSIGNED ZEROFILL	No	None	AUTO_INCREMENT	 Navegar los valores distintivos	 Cambiar	 Eliminar	 Primaria	 Único	 Índice	Texto completo
    //tipo	varchar(20)	utf8_general_ci		No	A		 Navegar los valores distintivos	 Cambiar	 Eliminar	 Primaria	 Único	 Índice	Texto completo
    //num	int(8)		UNSIGNED ZEROFILL	No	None		 Navegar los valores distintivos	 Cambiar	 Eliminar	 Primaria	 Único	 Índice	Texto completo
    //descripcion	varchar(100)	utf8_general_ci		No	Factura A		 Navegar los valores distintivos	 Cambiar	 Eliminar	 Primaria	 Único	 Índice	Texto completo
    //impresora	varchar(200)	utf8_general_ci		No	impresora		 Navegar los valores distintivos	 Cambiar	 Eliminar	 Primaria	 Único	 Índice	Texto completo
    //renglones	tinyint(3)		UNSIGNED	No	10		 Navegar los valores distintivos	 Cambiar	 Eliminar	 Primaria	 Único	 Índice	Texto completo
    //copias	tinyint(3)		UNSIGNED	No	2		 Navegar los valores distintivos	 Cambiar	 Eliminar	 Primaria	 Único	 Índice	Texto completo
    //nc	tinyint(1)			No	1		 Navegar los valores distintivos	 Cambiar	 Eliminar	 Primaria	 Único	 Índice	Texto completo
    //nd
            config_facturaTableAdapter dbConfigFactura = new config_facturaTableAdapter();
            DataTable tablaConfigFActura = new DataTable();
            

            dbConfigFactura.Connection.Open();
            MySqlTransaction mitransaccion = dbConfigFactura.Connection.BeginTransaction();

            try
            {
                tablaConfigFActura = dbConfigFactura.GetData();

                foreach (DataRow items in tablaConfigFActura.Rows)
                {
                    ConfigFactura dataConfig = new ConfigFactura();
                    dataConfig.CodigoEmpresa = Convert.ToByte(items["codigo_empresa"]);
                    dataConfig.CodigoTipo = Convert.ToInt16(items["codigoTipo"]);
                    dataConfig.Tipo = items["tipo"].ToString();
                    dataConfig.NumFactura = Convert.ToInt32(items["num"]);
                    dataConfig.Descripcion = items["descripcion"].ToString();
                    dataConfig.Impresora = items["impresora"].ToString();
                    dataConfig.Renglones = Convert.ToInt16( items["renglones"] );
                    dataConfig.Copias = Convert.ToByte(items["copias"].ToString());
                    dataConfig.Nc = Convert.ToByte(items["nc"].ToString());
                    dataConfig.Nd = Convert.ToByte(items["nd"].ToString());
                    _configFact.Add(dataConfig);
                }
            }
            catch (Exception e)
            {
                mitransaccion.Rollback();
                MessageBox.Show("Error: Classs ConfigFacturaDB - metodo: obtenerConfiguracion :: " + e.Message, "Cuidado", MessageBoxButton.OK);
                
            }
            finally 
            {
                mitransaccion.Connection.Close();
            }
        }

        //filtra la configuracion de una factura
        public void filtrarfactura(ConfigFactura aux)
        {
            ConfigFactura result = _configFact.Find(
                delegate(ConfigFactura bk)
                {
                    return (bk.CodigoEmpresa == aux.CodigoEmpresa &&
                           bk.CodigoTipo == aux.CodigoTipo);
                }
            );
            if (result != null)
                enviarConfig(result);
            else
                enviarConfig(new ConfigFactura());
        }



    }
}
